package dao;

import java.util.List;

import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import beans.User;
/**
 * 改进型UserDao，实现对users表的基本数据库操作：添加、删除、更新和查询。
 * 改进型UserDao继承了改进型的BaseDao，继承并直接使用BaseDao中定义的通用的update和query方法。
 * @author Steven Suo
 *
 */
public class UserDao extends BaseDao<User> implements DAO<User>{
	/**
	 * 添加user的方法，主要用于用户注册时，userName是唯一的，不能有重复值
	 */
	public int insert(User t) {
		String sql = "INSERT INTO tuser (userName,pwd) VALUES (?,?)";
		return update(sql, t.getUserName(),t.getPwd());
	}

	/**
	 * 更新用户信息的方法，id和userName是唯一的，不能更新。
	 */
	public int update(User t) {
		String sql = "UPDATE tuser SET pwd = ?,realName=?,email=?,address=?,cellphone=?,headPhoto=? WHERE id = ?";
		return update(sql, t.getPwd(),t.getRealName(),t.getEmail(),t.getAddress(),t.getCellphone(),t.getHeadPhoto(),t.getId());
	}
	
	/**
	 * 根据id查询用户，返回查找到的TUser对象或null；
	 */
	public User findByPK(int id) {
		String sql = "SELECT * FROM tuser WHERE id = ?";
		return queryObject(new BeanHandler<>(User.class), sql, id);
	}
	/**
	 * 根据sql语句和参数进行查询，该查询方法最多只返回一条记录也就是一个TUser对象，查询不到则返回null；
	 */
	public User findBy(String sql, Object... params) {
		return queryObject(new BeanHandler<>(User.class), sql, params);
	}
	/**
	 * 查找所有用户，返回TUser对象的集合，如果没有数据则返回一个空的集合对象。
	 */
	public List<User> findAll() {
		String sql = "SELECT * FROM tuser";
		return queryList(new BeanListHandler<>(User.class), sql);
	}
	/**
	 * 根据sql语句和参数进行查询，该查询方法能返回n条记录(n大于等于0)，如果n大于0，则返回TUser对象的集合，反之则返回一个空的集合对象。
	 */
	public List<User> findListBy(String sql, Object... params) {
		// TODO Auto-generated method stub
		return queryList(new BeanListHandler<>(User.class), sql, params);
	}
	/**
	 * 根据id删除一个用户
	 */
	public int delete(int id) {
		String sql = "DELETE FROM tuser WHERE id = ?";
		return update(sql, id);
	}
	/**
	 * 新增方法，根据用户名/密码对查询一个用户，用于用户登录验证。
	 * @param userName 用户登录时提交的用户名
	 * @param pwd 用户登录时提交的密码
	 * @return 如果用户名/密码对错误，则返回null。
	 */
	public User findByNameAndPwd(String userName,String pwd){
		String sql = "SELECT * FROM tuser WHERE userName = ? AND pwd = ?";
		return findBy(sql, userName,pwd);
	}
	
	
}
